Computer systems have achieved wide usage in modern society. During operation, a computer system processes and stores data at a speed and at a level of accuracy many times that which can be performed manually. Successive generations of computer systems have permitted ever-increasing amounts of data to be processed at ever-increasing rates.
Computer systems are sometimes operated as stand-alone devices or connected together by way of network connections, typically together with a network server, to form a computer network. When networked together, communication between the separate computer systems is possible. Files and other data, stored or generated at one computer system, can be transferred to another computer system.
A conventional computer system typically includes one or more Central Processing Units (CPUs) capable of executing algorithms forming applications and a computer main memory. Peripheral devices, both those embedded together with a CPU or constructed to be separate therefrom, also typically form portions of a conventional computer system. Computer peripheral devices include, for instance, video graphics adapters, Local Area Network (LAN) interfaces, Small Computer System Interface (SCSI) bus adapters, and mass storage devices, such as disk drive assemblies.
A computer system further typically includes computer buses which permit the communication of data between various portions of the computer system. For example, a host bus, a memory bus, at least one high-speed bus, a local peripheral expansion bus, and one or more additional peripheral buses form portions of a typical computer system.
A peripheral bus is formed, for instance, of an SCSI bus, an Extension to Industry Standard Architecture (EISA) bus, an Industry Standard Architecture (ISA) bus, or a Peripheral Component Interface (PCI) bus. The peripheral bus forms a communication path to and from a peripheral device connected thereto. The computer system CPU, or a plurality of CPUs in a multi-processor system, communicates with a computer peripheral device by way of a computer bus, such as one or more of the computer buses noted above.
A computer peripheral, depending upon its data transfer speed requirements, is connected to an appropriate peripheral bus, typically by way of a bus bridge that detects required actions, arbitrates, and translates both data and addresses between the various buses.
A computer peripheral device forming a portion of a single computer system might well be supplied by a manufacturer other than the manufacturer of the computer CPU. If the computer system contains more than one peripheral device, the peripheral devices might also be supplied by different manufacturers. Furthermore, the computer system may be operable pursuant to any of several different operating systems. The various combinations of computer peripheral devices and computer operating systems of which a computer system might be formed quickly becomes quite large.
Software drivers are typically required for each computer peripheral device to effectuate its operation. A software driver must be specifically tailored to operate in conjunction with the particular operating system operating on the computer. A multiplicity of software drivers might have to be created for a single computer peripheral to ensure that a computer peripheral device is operable together with any of the different operating systems.
The complexity resulting from such a requirement has led, at least in part, to the development of an Intelligent Input/Output (I.sub.2 O) standard specification. The I.sub.2 O standard specification sets forth, inter alia, standards for an I/O device driver architecture that is independent of both the specific peripheral device being controlled and the operating system of the computer system to which the device driver is to be installed.
In the I.sub.2 O standard specification, the portion of the driver that is responsible for managing the peripheral device is logically separated from the specific implementation details of the operating system with which is to be installed. Because of this, the part of the driver that manages the peripheral device is portable across different computer and operating systems. The I.sub.2 O standard specification also generalizes the nature of communication between the host computer system and peripheral hardware; thus, providing processor and bus technology independence.
The "split driver" model of the I.sub.2 O specification, described above, allows for peripheral devices to communicate directly between each other using what is referred to as Peer-to-Peer communication. Peer-to-Peer communication allows two or more devices to communicate and transfer data between themselves with little or no involvement by the host CPU. In many instances it would be advantageous if a Peer Service User, operating on a first input/Output (IOP), could allocate memory space in the memory of a second IOP for use in Peer-to-Peer communication. For example, in certain instances, it may be advantageous for a Peer Service User operating on a second IOP to have instant access to data available to a Peer Service User operating on a first IOP. Given the ability to allocate memory space in the memory of a second IOP, the Peer Service User operating on a first IOP could transfer data directly into the memory space it allocated on a second IOP thereby allowing the Peer Service User operating on the second IOP instant access to the data.
In a second example, the Peer Service User operating on the first IOP may execute an application which requires more memory space than is presently available in the memory of the first IOP while, at the same time, the second IOP has excess memory capacity. If the Peer Service User operating on the first IOP were given the ability to allocate memory space in the memory of the second IOP, the Peer Service User operating on the first IOP could use Peer-to-Peer data transfers to utilize the additional memory space for use in executing the application.
Based upon the foregoing, is should be understood that it would be advantageous for a Peer Service User operating on a local IOP to remotely allocate memory space in the memory of a remote IOP.